package com.liuhouse1.controller;

import com.liuhouse1.pojo.Student;
import org.springframework.web.bind.annotation.*;

//代表这个是一个被IOC管理的控制器(Controller) + 所以的方法都是响应体(ResponseBody)
@RestController
public class MyRestController {


    /**
     * 一句话说明REST
     * 使用url表示资源,使用http动作操作资源
     *
     * 注解
     * @PathVariable : 从url中获取数据
     * @GetMapping : 支持的get请求方式,等同于@RequestMapping(method=RequestMethod.GET)
     * @PostMapping : 支持post请求方式,等同于@RequestMapping(method=RequestMethod.POST)
     * @PutMapping : 支持put的请求方式,等同于@RequestMapping(method=RequestMethod.PUT)
     * @DeleteMapping:支持delete请求方式,等同于@RequestMapping(method=RequestMethod.DELETE)
     *
     * @RestController:复合注解,是@Controller和@ResponseBody组合
     *      在类的上面使用@RestController,表示当前类的所有的方法都加入了@ResponseBody
     *
     *
     *
     *
     */

    /**
     * @PathVariable (路径变量) : 获取url中的数据
     *          属性 : value : 路径的变量名称
     *          位置 : 放在控制器方法的形参前面
     *    http://localhost:8888/my_tran/student/1
     * {stuId}:定义路径变量 , stuId自定义名称
     * @param studentId
     *
     * 自己总结
     * stuId自定义的路径参数
     * 赋值给形参前面的@PathVariable的注解的 value值  stuId   最后赋值给形参
     *  路径参数的格式 {变量名称}   不需要 $   这是框架规则  遵守即可
     * @return
     */
    @GetMapping("/student/{stuId}")
    public String queryStudent(@PathVariable(value = "stuId") Integer studentId){
        return "查询学生,执行get请求-studentId=" + studentId;
    }

    /**
     * 创建资源 Post请求
     * @param name
     * @param age
     * @return
     */
    @PostMapping("/student/{name}/{age}")
    public String createStudent(@PathVariable("name") String name , @PathVariable("age") String age){
        return "创建学生资源 执行post请求 - name=" + name + "age=" + age;
    }


    /**
     * 更新资源
     * 当路径变量的名称和形参的名称一样的时候，@PathVariable中的value是可以省略的
     */
    @PutMapping("/student/{id}/{age}")
    public String putStudent(@PathVariable Integer id , @PathVariable Integer age){
        return "更新学生资源 执行put请求:id=" + id + "age=" + age;
    }


    /**
     * 删除资源
     * @return
     */
    @DeleteMapping("/student/{id}")
    public String deleteStudent(@PathVariable Integer id){
        return "删除资源,执行delete,id=" + id;
    }


    @PostMapping("/student_add")
    public Student student_add(Student student){
        return student;
    }




}
